package com.gin.pixiv.api

import com.gin.pixiv.enums.Restrict
import com.gin.pixiv.response.PixivResponse
import com.gin.pixiv.response.user.UserInfo
import com.gin.pixiv.response.user.UserRecommendBody
import com.gin.retrofit.annotation.StaticField
import com.gin.retrofit.annotation.StaticFields
import retrofit2.Call
import retrofit2.http.*

/**
 * 用户API
 * @author BX-Gin
 * @from 2024/2/26 16:24
 */
interface UserApi {
    /**
     * 根据一个用户推荐其他用户和他们的作品
     */
    @GET("ajax/user/{userId}/recommends")
    fun getRecommend(
        @Path("userId") userId: Long,
        /**
         * 推荐的用户数量
         */
        @Query("userNum") userNum: Int? = 20,
        /**
         * 附带的作品数量
         */
        @Query("workNum") workNum: Int? = 3,
        /**
         * 是否包括R18作品
         */
        @Query("isR18") isR18: Boolean? = true,
    ): Call<PixivResponse<UserRecommendBody>>

    /**
     * 查询用户信息
     */
    @GET("ajax/user/{userId}")
    fun getUserInfo(
        @Path("userId") userId: Long,
        /**
         * 是否请求完整信息, 1 = true
         */
        @Query("full") fullData: Int? = null,
    ): Call<PixivResponse<UserInfo>>

    /**
     * 关注一个用户
     */
    @FormUrlEncoded
    @POST("bookmark_add.php")
    @StaticFields(
        [
            StaticField("mode", "add"),
            StaticField("type", "user"),
            StaticField("format", "json"),
        ]
    )
    fun postFollow(
        @Field("user_id") userId: Long,
        @Field("restrict") restrict: Restrict? = Restrict.PUBLIC,
        @Field("tag") tag: String? = null,
    ): Call<Void>

    /**
     * 取消关注一个用户
     */
    @FormUrlEncoded
    @POST("rpc_group_setting.php")
    @StaticFields(
        [
            StaticField("mode", "del"),
            StaticField("type", "bookuser"),
        ]
    )
    fun postUnfollow(
        @Field("id") userId: Long,
    ): Call<HashMap<String, String>>
}